<?php
/**
 * Classe model da tabela Atividade
 * @filesource
 * @author			Marcos Rodrigo
 * @copyright		Copyright 2009 M2R
 * @package			broffices
 * @subpackage		broffices.application.models
 * @version			1.0
*/
class Atividade extends Zend_Db_Table_Abstract
{
	protected $_name = "tbl_atividade";
	protected $_dependentTables = array("Usuario");
	
	/**
	 * Retorna registros do banco de dados
	 * @param array $where - array com dados where no formato "nome_coluna_1"=>"valor_1","nome_coluna_2"=>"valor_2"
	 * @param array $order - array com orders no formado "coluna_1 desc","coluna_2"...
	 * @param int $tamanho - numero de registros que deve retornar
	 * @param int $inicio - offset
	 * @return Zend_Db_Table_Rowset_Abstract
	 */
	public function busca($where=array(), $order=array(), $tamanho=-1, $inicio=-1)
	{
		// criando objeto do tipo select
		$slct = $this->select();
		
		$slct->setIntegrityCheck(false);
		
		$slct->from(array("a"=>"tbl_atividade"));
					
		$slct->joinLeft(array("u"=>"tbl_usuario"), 
									"u.id = a.remetente_id", 
									array("vhr_remetente"=>"u.vhr_nome"));
					
		$slct->joinLeft(array("z"=>"tbl_usuario"), 
									"z.id = a.destinatario_id", 
									array("vhr_destinatario"=>"z.vhr_nome"));
		

		// adicionando clausulas where
		foreach ($where as $coluna=>$valor)
		{
			$slct->where($coluna." ?", $valor);
		}

		// adicionando linha order ao select
		$slct->order($order);

		// paginacao 
		if ($tamanho > -1)
		{
			$tmpInicio = 0;
			if ($inicio > -1) 
			{
				$tmpInicio = $inicio;
			}
			$slct->limit($tamanho, $tmpInicio);
		}
		
		// retornando os registros conforme objeto select
		return $this->fetchAll($slct);
	}
	
	/**
	 * Retorna registros do banco de dados
	 * @param array $where - array com dados where no formato "nome_coluna_1"=>"valor_1","nome_coluna_2"=>"valor_2"
	 * @param array $order - array com orders no formado "coluna_1 desc","coluna_2"...
	 * @param int $tamanho - numero de registros que deve retornar
	 * @param int $inicio - offset
	 * @return Zend_Db_Table_Rowset_Abstract
	 */
	public function buscaINouNotIN($where=array(), $order=array(), $tamanho=-1, $inicio=-1)
	{
		// criando objeto do tipo select
		$slct = $this->select();
		
		$slct->setIntegrityCheck(false);
		
		$slct->from(array("a"=>"tbl_atividade"));
					
		$slct->joinLeft(array("u"=>"tbl_usuario"), 
									"u.id = a.remetente_id", 
									array("vhr_remetente"=>"u.vhr_nome"));
					
		$slct->joinLeft(array("z"=>"tbl_usuario"), 
									"z.id = a.destinatario_id", 
									array("vhr_destinatario"=>"z.vhr_nome"));
		

		// adicionando clausulas where
		foreach ($where as $coluna=>$valor)
		{
			$slct->where($coluna, $valor);
		}

		// adicionando linha order ao select
		$slct->order($order);

		// paginacao 
		if ($tamanho > -1)
		{
			$tmpInicio = 0;
			if ($inicio > -1) 
			{
				$tmpInicio = $inicio;
			}
			$slct->limit($tamanho, $tmpInicio);
		}
		
		// retornando os registros conforme objeto select
		return $this->fetchAll($slct);
	}
	
	/**
	 * Retorna registros do banco de dados
	 * @param array $where - array com dados where no formato "nome_coluna_1"=>"valor_1","nome_coluna_2"=>"valor_2"
	 * @param array $order - array com orders no formado "coluna_1 desc","coluna_2"...
	 * @param int $tamanho - numero de registros que deve retornar
	 * @param int $inicio - offset
	 * @return Zend_Db_Table_Rowset_Abstract
	 */
	public function buscaDestinatario($where=array(), $order=array(), $tamanho=-1, $inicio=-1)
	{
		// criando objeto do tipo select
		$slct = $this->select();
		
		$slct->setIntegrityCheck(false);
		
		$slct->from(array("a"=>"tbl_atividade"));
					
		$slct->joinInner(array("u"=>"tbl_usuario"), 
									"u.id = a.destinatario_id", 
									array("usuario_id"=>"u.id",
										  "vhr_nome"=>"u.vhr_nome",
										  "vhr_login"=>"u.vhr_login"));

		// adicionando clausulas where
		foreach ($where as $coluna=>$valor)
		{
			$slct->where($coluna." ?", $valor);
		}

		// adicionando linha order ao select
		$slct->order($order);

		// paginacao 
		if ($tamanho > -1)
		{
			$tmpInicio = 0;
			if ($inicio > -1) 
			{
				$tmpInicio = $inicio;
			}
			$slct->limit($tamanho, $tmpInicio);
		}
		
		// retornando os registros conforme objeto select
		return $this->fetchAll($slct);
	}
	
	/**
	 * Retorna registros do banco de dados
	 * @param array $where - array com dados where no formato "nome_coluna_1"=>"valor_1","nome_coluna_2"=>"valor_2"
	 * @param array $order - array com orders no formado "coluna_1 desc","coluna_2"...
	 * @param int $tamanho - numero de registros que deve retornar
	 * @param int $inicio - offset
	 * @return Zend_Db_Table_Rowset_Abstract
	 */
	public function buscaDestinatarioINouNotIN($where=array(), $order=array(), $tamanho=-1, $inicio=-1)
	{
		// criando objeto do tipo select
		$slct = $this->select();
		
		$slct->setIntegrityCheck(false);
		
		$slct->from(array("a"=>"tbl_atividade"));
					
		$slct->joinInner(array("u"=>"tbl_usuario"), 
									"u.id = a.destinatario_id", 
									array("usuario_id"=>"u.id",
										  "vhr_nome"=>"u.vhr_nome",
										  "vhr_login"=>"u.vhr_login"));

		// adicionando clausulas where
		foreach ($where as $coluna=>$valor)
		{
			$slct->where($coluna, $valor);
		}

		// adicionando linha order ao select
		$slct->order($order);

		// paginacao 
		if ($tamanho > -1)
		{
			$tmpInicio = 0;
			if ($inicio > -1) 
			{
				$tmpInicio = $inicio;
			}
			$slct->limit($tamanho, $tmpInicio);
		}
		
		// retornando os registros conforme objeto select
		return $this->fetchAll($slct);
	}
	
	/**
	 * Retorna registros do banco de dados
	 * @param array $where - array com dados where no formato "nome_coluna_1"=>"valor_1","nome_coluna_2"=>"valor_2"
	 * @param array $order - array com orders no formado "coluna_1 desc","coluna_2"...
	 * @param int $tamanho - numero de registros que deve retornar
	 * @param int $inicio - offset
	 * @return Zend_Db_Table_Rowset_Abstract
	 */
	public function buscaRemetente($where=array(), $order=array(), $tamanho=-1, $inicio=-1)
	{
		// criando objeto do tipo select
		$slct = $this->select();
		
		$slct->setIntegrityCheck(false);
		
		$slct->from(array("a"=>"tbl_atividade"));
					
		$slct->joinInner(array("u"=>"tbl_usuario"), 
									"u.id = a.remetente_id", 
									array("usuario_id"=>"u.id",
										  "vhr_nome"=>"u.vhr_nome",
										  "vhr_login"=>"u.vhr_login"));
	

		// adicionando clausulas where
		foreach ($where as $coluna=>$valor)
		{
			$slct->where($coluna." ?", $valor);
		}

		// adicionando linha order ao select
		$slct->order($order);

		// paginacao 
		if ($tamanho > -1)
		{
			$tmpInicio = 0;
			if ($inicio > -1) 
			{
				$tmpInicio = $inicio;
			}
			$slct->limit($tamanho, $tmpInicio);
		}
		
		// retornando os registros conforme objeto select
		return $this->fetchAll($slct);
	}
	
	/**
	 * Retorna registros do banco de dados
	 * @param array $where - array com dados where no formato "nome_coluna_1"=>"valor_1","nome_coluna_2"=>"valor_2"
	 * @param array $order - array com orders no formado "coluna_1 desc","coluna_2"...
	 * @param int $tamanho - numero de registros que deve retornar
	 * @param int $inicio - offset
	 * @return Zend_Db_Table_Rowset_Abstract
	 */
	public function buscaRemetenteINouNotIN($where=array(), $order=array(), $tamanho=-1, $inicio=-1)
	{
		// criando objeto do tipo select
		$slct = $this->select();
		
		$slct->setIntegrityCheck(false);
		
		$slct->from(array("a"=>"tbl_atividade"));
					
		$slct->joinInner(array("u"=>"tbl_usuario"), 
									"u.id = a.remetente_id", 
									array("usuario_id"=>"u.id",
										  "vhr_nome"=>"u.vhr_nome",
										  "vhr_login"=>"u.vhr_login"));
	

		// adicionando clausulas where
		foreach ($where as $coluna=>$valor)
		{
			$slct->where($coluna, $valor);
		}

		// adicionando linha order ao select
		$slct->order($order);

		// paginacao 
		if ($tamanho > -1)
		{
			$tmpInicio = 0;
			if ($inicio > -1) 
			{
				$tmpInicio = $inicio;
			}
			$slct->limit($tamanho, $tmpInicio);
		}
		
		// retornando os registros conforme objeto select
		return $this->fetchAll($slct);
	}
	
	/**
	 * apaga um registro da tabela
	 * @param int $codigo - codigo do registro para apagar
	 * @return void
	 */
	public function apaga($codigo)
	{
		$row = $this->find($codigo)->current();
		$row->bln_ativo = 0;
		$row->save();
//		$where = $this->getAdapter()->quoteInto('id = ?', $codigo);
//		$this->delete($where);
	}
	
	/**
	 * retorna total de registros do banco
	 * @param array $where - array com dados where no formato "nome_coluna_1"=>"valor_1","nome_coluna_2"=>"valor_2"
	 * @return int
	 */
	public function pegaTotalRemetente($where=array())
	{
		$slct = $this->select();
		
		$slct->setIntegrityCheck(false);
		
		$slct->from(array("a"=>"tbl_atividade"), array("COUNT(a.id) as total")); 

		$slct->joinInner(array("u"=>"tbl_usuario"),
										"a.remetente_id = u.id");

		foreach ($where as $coluna=>$valor)
		{
			$slct->where($coluna." ?", $valor);
		}
		
		$rows = $this->fetchAll($slct);
		
		return $rows->current()->total;
	}
	
	/**
	 * retorna total de registros do banco
	 * @param array $where - array com dados where no formato "nome_coluna_1"=>"valor_1","nome_coluna_2"=>"valor_2"
	 * @return int
	 */
	public function pegaTotalRemetenteINouNotIN($where=array())
	{
		$slct = $this->select();
		
		$slct->setIntegrityCheck(false);
		
		$slct->from(array("a"=>"tbl_atividade"), array("COUNT(a.id) as total")); 

		$slct->joinInner(array("u"=>"tbl_usuario"),
										"a.remetente_id = u.id");

		foreach ($where as $coluna=>$valor)
		{
			$slct->where($coluna, $valor);
		}
		
		$rows = $this->fetchAll($slct);
		
		return $rows->current()->total;
	}
	
	/**
	 * retorna total de registros do banco
	 * @param array $where - array com dados where no formato "nome_coluna_1"=>"valor_1","nome_coluna_2"=>"valor_2"
	 * @return int
	 */
	public function pegaTotalDestinatarioINouNotIN($where=array())
	{
		//x($where);
		$slct = $this->select();
		
		$slct->setIntegrityCheck(false);
		
		$slct->from(array("a"=>"tbl_atividade"), array("COUNT(a.id) as total")); 

		$slct->joinInner(array("u"=>"tbl_usuario"),
										"a.destinatario_id = u.id");
		
		foreach ($where as $coluna=>$valor)
		{
			$slct->where($coluna, $valor);
		}
		//xd($slct);
		$rows = $this->fetchAll($slct);
		
		return $rows->current()->total;
	}
	
	/**
	 * retorna total de registros do banco
	 * @param array $where - array com dados where no formato "nome_coluna_1"=>"valor_1","nome_coluna_2"=>"valor_2"
	 * @return int
	 */
	public function pegaTotalDestinatario($where=array())
	{
		//x($where);
		$slct = $this->select();
		
		$slct->setIntegrityCheck(false);
		
		$slct->from(array("a"=>"tbl_atividade"), array("COUNT(a.id) as total")); 

		$slct->joinInner(array("u"=>"tbl_usuario"),
										"a.destinatario_id = u.id");
		
		foreach ($where as $coluna=>$valor)
		{
			$slct->where($coluna." ?", $valor);
		}
		//xd($slct);
		$rows = $this->fetchAll($slct);
		
		return $rows->current()->total;
	}	
	
	/**
	 * retorna total de registros do banco
	 * @param array $where - array com dados where no formato "nome_coluna_1"=>"valor_1","nome_coluna_2"=>"valor_2"
	 * @return int
	 */
	public function pegaTotal($where=array())
	{
		//x($where);
		$slct = $this->select();
		
		$slct->setIntegrityCheck(false);
		
		$slct->from(array("a"=>"tbl_atividade"), array("COUNT(a.id) as total"));
					
		$slct->joinLeft(array("u"=>"tbl_usuario"), 
									"u.id = a.remetente_id");
					
		$slct->joinLeft(array("z"=>"tbl_usuario"), 
									"z.id = a.destinatario_id");
		
		foreach ($where as $coluna=>$valor)
		{
			$slct->where($coluna." ?", $valor);
		}
		//xd($slct);
		$rows = $this->fetchAll($slct);
		
		return $rows->current()->total;
	}

	/**
	 * retorna total de registros do banco
	 * @param array $where - array com dados where no formato "nome_coluna_1"=>"valor_1","nome_coluna_2"=>"valor_2"
	 * @return int
	 */
	public function pegaTotalINouNotIN($where=array())
	{
		//x($where);
		$slct = $this->select();
		
		$slct->setIntegrityCheck(false);
		
		$slct->from(array("a"=>"tbl_atividade"), array("COUNT(a.id) as total"));
					
		$slct->joinLeft(array("u"=>"tbl_usuario"), 
									"u.id = a.remetente_id");
					
		$slct->joinLeft(array("z"=>"tbl_usuario"), 
									"z.id = a.destinatario_id");
		
		foreach ($where as $coluna=>$valor)
		{
			$slct->where($coluna, $valor);
		}
		//xd($slct);
		$rows = $this->fetchAll($slct);
		
		return $rows->current()->total;
	}

}
